package com.cb2.algorithm.leetcode;

/**
 * <a href='https://leetcode.cn/problems/valid-mountain-array/'>有效的山脉数组(Valid Mountain Array)</a>
 * <p>给定一个整数数组 arr，如果它是有效的山脉数组就返回 true，否则返回 false。</p>
 * <p>让我们回顾一下，如果 arr 满足下述条件，那么它是一个山脉数组：
 * <ul>
 *     <li>arr.length >= 3</li>
 *     <li>在 0 < i < arr.length - 1 条件下，存在 i 使得：</li>
 *     <ul>
 *         <li>arr[0] < arr[1] < ... arr[i-1] < arr[i] </li>
 *         <li>arr[i] > arr[i+1] > ... > arr[arr.length - 1]</li>
 *     </ul>
 * </ul></p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 *  示例 1：
 *      输入：arr = [2,1]
 *      输出：false
 *
 *  示例 2：
 *      输入：arr = [3,5,5]
 *      输出：false
 *
 *  示例 3：
 *      输入：arr = [0,3,2,1]
 *      输出：true
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= arr.length <= 10^4</li>
 *     <li>0 <= arr[i] <= 10^4</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2025/2/24 16:22
 */
public class LC0941ValidMountainArray_S {
    static class Solution {
        public boolean validMountainArray(int[] arr) {
            int n = arr.length;
            if (n < 3) {
                return false;
            }
            int i = 0;
            // 递增段
            while (i + 1 < n && arr[i] < arr[i + 1]) {
                ++i;
            }
            // 0-1   位置就是递减的，缺少先增的范围
            // 0-n-1 位置均是递增的，缺少后减的范围
            if (i == 0 || i == n - 1) {
                return false;
            }
            // 递减段
            while (i + 1 < n && arr[i] > arr[i + 1]) {
                ++i;
            }
            return i == n - 1;


            //for (int i = 1; i < n; i++) {
            //    // 1.如果是递增的，跳过不做处理
            //
            //    // 2.如果是相等的，返回false
            //    if (arr[i] == arr[i - 1]) {
            //        return false;
            //    }
            //    // 3.如果是递减的,产生结果
            //    // 一直递减到结束，返回true，否则返回false
            //    if (arr[i] < arr[i - 1]) {
            //        // 从0-1就开始递减，缺少递增的部分，返回false
            //        if (i == 1) {
            //            return false;
            //        }
            //        while (i < n && arr[i] < arr[i - 1]) {
            //            ++i;
            //        }
            //        return i == n;
            //    }
            //}
            //// 到这里说明一直是递增的，返回false
            //return false;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.validMountainArray(new int[]{2, 1}));
        System.out.println(solution.validMountainArray(new int[]{3, 5, 5}));
        System.out.println(solution.validMountainArray(new int[]{0, 3, 2, 1}));
    }
}
